import errorCode from "@/constants/errorCode";
import config from 'config/env';
import {
	getToken
} from '@/utils/auth';
import {
	toLoginUrl
} from '@/utils/index';
import store from '@/store';
const myRequest = (options) => { //暴露一个function：myRequest，使用options接收页面传过来的参数
	return new Promise((resolve, reject) => { //异步封装接口，使用Promise处理异步请求
		if (options.showLoading) {
			uni.showLoading({
				title: '加载中'
			});
		}
		let url = options.url;

		//#ifndef H5 
		url = config.basePath + options.url
		//#endif
		uni.request({ //发送请求
			url: url, //接收请求的API
			method: options.method || 'GET', //接收请求的方式,如果不传默认为GET
			header: {
				'hx-token': getToken(), // 请求token
				//#ifdef MP-WEIXIN
				'client-type': 'WX_MA', //客户端微信小程序
				'app-id': uni.getAccountInfoSync().miniProgram.appId, //小程序appId
				//#endif
				//#ifdef APP-PLUS
				'client-type': 'APP', //客户端类型APP
				'tenant-id': config.tenantId,
				//#endif
				//#ifdef H5
				'client-type': 'H5', //客户端H5
				'tenant-id': config.tenantId,
				//#endif
				//#ifdef MP-ALIPAY
				'client-type': 'ALI_MA', //客户端支付宝小程序
				'app-id': config.aliAppId, //小程序appId
				//#endif
				//#ifdef MP-TOUTIAO
				'client-type': 'APP', //客户端类型APP
				'tenant-id': config.tenantId,
				//#endif

			},
			data: options.data || {}, //接收请求的data,不传默认为空
			//接口请求成功
			success: async (res) => {
				const status = Number(res.statusCode) || 200
				const message = res.data.msg || errorCode[status] || errorCode['default']
				if (status != 200 || res.data.code == -1) {
					uni.$emit('z-paging-error-emit');
					uni.showModal({
						title: '提示',
						content: message,
						success() {}
					});
					reject(new Error(message));
				}
				// token为空或token过期
				if (res.data.code === 40001 || res.data.code === 40002) {
					if (!getApp().globalData.isLoading) {
						getApp().globalData.isLoading = true;
						// #ifdef MP
						// 静默登录
						await store.dispatch("BeforeLogin").then(() => {
							var pages = getCurrentPages(); // 获取页面栈
							var currPage = pages[pages.length - 1]; // 当前页面
							currPage.onLoad(currPage.options)
						})
						getApp().globalData.isLoading = false;
						// #endif
						// #ifndef MP
						// 跳转登录
						await toLoginUrl();
						getApp().globalData.isLoading = false;
						// #endif

					}

					reject(new Error("token为空或token过期"));
				} else if (res.data.code === 40003) { // 强制跳转登录
					if (!getApp().globalData.isLoading) {
						getApp().globalData.isLoading = true;
						// 跳转登录
						await toLoginUrl();
						getApp().globalData.isLoading = false;
					}

					reject(new Error("请登录"));
				}
				resolve(res.data) //成功,将数据返回
			},
			fail: (err) => { //失败操作
				uni.$emit('z-paging-error-emit');
				uni.showModal({
					title: '提示',
					content: '接口请求出错：' + err.errMsg
				});
				reject(err)
			},
			complete(res) {
				if (options.showLoading) {
					uni.hideLoading();
				}
			}
		})
	})
}

module.exports = {
	myRequest
}
